package cn.demoncat.util.exception;

import cn.demoncat.util.lang.entity.Result;

import java.util.function.Supplier;

/**
 * 业务警告 -主动抛出- 正常错误 warn
 *
 * 1 场景：用户正常操作时出现业务错误，需要提示错误信息到客户端
 * 2 直接通知错误信息到客户端，不需要处理
 * 3 将导致事务回滚的业务异常
 *
 * @author 延晓磊
 *
 * @since 2017年3月26日
 */
public class BizRuntimeException extends WarnRuntimeException{

	/**
	 * 服务异常
	 */
	public static final BizRuntimeException COMMON = new BizRuntimeException(Result.FAIL.getMsg());
	/**
	 * 服务繁忙
	 */
	public static final BizRuntimeException BUSY = new BizRuntimeException(Result.ERROR_BUSY.getMsg());
	
	public BizRuntimeException() {
		super();
	}

	public BizRuntimeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}

	public BizRuntimeException(String message, Throwable cause) {
		super(message, cause);
	}

	public BizRuntimeException(String message) {
		super(message);
	}

	public BizRuntimeException(Throwable cause) {
		super(cause);
	}

	public BizRuntimeException(String message, String code, Throwable cause) {
		super(message, code, cause);
	}

	public BizRuntimeException(String message, String code) {
		super(message, code);
	}

	/**
	 * 获取结果
	 *
	 * @param supplier
	 * @param <T>
	 * @return	抛异常时返回 null
	 *
	 * @author 延晓磊
	 * @since 2022年08月01日
	 */
	public static <T>T get(Supplier<T> supplier){
		try {
			return supplier.get();
		}catch (BizRuntimeException e){
			return null;
		}
	}
}
